<?php
      @header("Content-Type:text/html;charset=utf-8");    // 配置php文件返回的 文本类型 编码(适应低版本)

//   数组  分为三种类型

    // 1. 数值数组 - 带有数字 ID 键的数组;
        $arr = array("a", "b", "c", "d");

        // 打印数组
            print_r($arr);           // 全部取值
            echo $arr[0];            // 单个取值
            echo "<br>";

        // 遍历数组        
            // count($arr);  接收一个数组返回数组的长度 

            // 1.for
                for($i=0; $i<count($arr); $i++){
                    echo $arr[$i]."<br>";
                }

            // 2. foreach
                foreach($arr as $index => $item) {
                    echo  $index."|".$item."<br>";
                }

    // 2. 关联数组 - 带有指定的键的数组，每个键关联一个值(键值对形式存在，类似js的对象);
        $arr1 = array("Perter"=>35,"Jone"=>19,"Tom"=>20,"Jery"=>43);
            
            // 打印数组
                print_r($arr1);         // 全部取值
                echo $arr1["Perter"];   // 单个取值  
                echo "<br>";

            // 遍历数组    foreach     
                foreach($arr1 as $index => $item) {
                    echo  $index.":".$item."<br>";
                 }


    // 3. 多维数组 - 包含一个或多个数组的数组;
        $arr2 = array (1,2,array(3,4,array(5,6)));
        print_r($arr2);
        echo "<br>";


    

// PHP
    // json_encode()    将 php语法中的数组 转为 json字符串

        // 1. 默认会将中文进行编码  解析后还是 正常数据    
        // 2. 代码在服务器(apache)上执行 结果以纯文本/HTML/json 形式返回给浏览器(接口返回的数据)   (关联数据转化为json类型的字符串时，就是对象结构)
        // 3. 前端请求的数据 就是php文件中echo输出的文本/HTML/json,一个接口一般只返回一条纯json类型的字符串
        
        $str = json_encode($arr2);
        echo $str."<br>";

    // json_decode()    将 json类型的字符串 转为 json类型的数组
        $arr3 = json_decode($str);
        print_r($arr3);
        echo("<br>");
    

?> 

<?php
    @header("Content-Type:text/html;charset=utf-8");    // 配置php文件返回的 文本类型 编码(适应低版本)

// 数组的方法

// 1. 数组头尾新增和删除
    $arr = array("x","y","z");
    // array_unshift();  头部新增
        array_unshift($arr,1);
    // array_push();     尾部新增
        array_push($arr,4);
        print_r($arr);
        echo("<br>");

    // array_shift()   头部删除
        array_shift($arr);
    // array_pop()     尾部删除
        array_pop($arr);
        print_r($arr);
        echo("<br>");


// 2. 数组增删改
    // array_splice()   任意位置增删改 
    
    // 删除
        array_splice($arr,1,1);         // 下标为1的位置删除1个元素 ("x","z")
    // 增加
        array_splice($arr,1,0,"hello"); // 下标为1的位置删除0个元素 ("x","hello","z")
    // 修改
        array_splice($arr,2,1,"hello"); // 下标为2的位置更换1个元素 ("x","hello","hello")
        print_r($arr);
        echo "<br>";


// 3. 数组裁切
    // array_slice(array, startIndex,endIndex);  [startIndex,endIndex](两个闭区间)
        $arr10 = array(1,2,"hello","x","y");
        $newList = array_slice($arr10,1,3);      // (2,"hello","x")
        print_r($newList);
        echo "<br>";


// 4. 数组反转
    // array_reverse();     返回反转后的新数组
        $list = array_reverse($newList);        // ("x","hello",2)
        print_r($list);
        echo "<br>";


// 5. 数组转字符串
    // join()/implode()   数组转字符串 (注 join()     implode() 的别名)
        $str11 = join($list,",");           // "x,hello,2"
        $str11 = implode($list,"|");        // "x|hello|2"     
        echo $str11."<br>";


// 6. 数组中是否存在某元素
    // in_array(item,$arr);   // 存在返回true  不存在返回false
        $arr = array("x","y","z");
        $res = in_array("y",$arr);    // 1
        echo $res."<br>";


// 7. 数组去重
    // array_unique($arr)   // 传入一个数组  返回去重后的新数组
        $arr = array(1,4,5,2,3,3,5,1,2,1,1,1,2,2);
        $list1 = array_unique($arr);
        print_r($list1);        // (1,4,5,2,3)
        echo "<br>";   


// 8. 数组排序

    // 1.数值数组排序 
        // 纯数字
            // sort() 升序排列      rsort()  降序排列
                sort($list1);       // (1,2,3,4,5)
                rsort($list1);      // (5,4,3,2,1)
                print_r($list1);
                echo "<br>";   

        // 非纯数字         按照码表排序
            $cars=array("Volvo","BMW","Toyota");
            sort($cars);        // ("BMW","Toyota","Volvo")
            rsort($cars);       // ("Volvo","Toyota","BMW")
            print_r($cars);
            echo "<br>";   

    // 2. 关联数组
        // ksort() - 根据关联数组的键，对数组进行升序排列;
        // krsort() - 根据关联数组的键，对数组进行降序排列;
            $list=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
            ksort($list);       // ("Ben"=>"37","Joe"=>"43","Peter"=>"35")
            krsort($list);      // ("Peter"=>"35","Joe"=>"43","Ben"=>"37")
            print_r($list);
            echo "<br>";   
        
        // asort() - 根据关联数组的值，对数组进行升序排列;
        // arsort() - 根据关联数组的值，对数组进行降序排列;
            asort($list);       // ("Peter"=>"35","Ben"=>"37","Joe"=>"43")
            arsort($list);      // ("Joe"=>"43","Ben"=>"37","Peter"=>"35")
            print_r($list);
            echo "<br>";   
?>
